﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Rance.Battle
{
    class 侠客AI_暗杀 : 侠客AI
    {
        public int 暗杀几率 = 85;

        public override AIResult Excute(角色 角色, 队伍状况 队伍状况, AI技能MGT 技能mgt)
        {
            //如果敌人有准备中的敌人优先攻击
            if (队伍状况.队伍.成员List.Exists(r => r.是否准备)) 
                return base.Excute(角色, 队伍状况, 技能mgt);

            if (技能mgt.Has("恶即斩"))
            {
                if (队伍状况.战场.AI乱数表.Hit(暗杀几率))
                {
                    AIResult result = new AIResult();
                    var 恶即斩 = 技能mgt.Get("恶即斩");
                    var 恶即斩target = get暗杀Target(ConvertSoloTarget(恶即斩.TargetList), 队伍状况);
                    result.Action = 恶即斩.Name;
                    result.TargetList.Add(恶即斩target);

                    return result;
                }
            }   

            return base.Excute(角色, 队伍状况, 技能mgt);
        }

        private 角色 get暗杀Target(List<角色> targetList, 队伍状况 队伍状况)
        {
            //优先暗杀"步卒"
            List<角色> tempList = new List<角色>();
            foreach (var item in targetList)
            {
                if (item.兵种.类型 != "步卒")
                    continue;

                tempList.Add(item);
            }

            //暗杀血多攻击高的目标
            if (tempList.Count != 0)
                targetList = tempList;

            if (targetList.Count == 1)
                return targetList[0];
            else
            {
                targetList.Sort((v1, v2) => (v1.兵种.攻 * v1.兵力 * v1.实际攻).CompareTo((v2.兵种.攻 * v2.兵力 * v2.实际攻)));
                targetList.Reverse();

                return targetList[0];
            }
        }

        private static 侠客AI_暗杀 instance = new 侠客AI_暗杀();
        public static 侠客AI_暗杀 GetInstance()
        {
            return instance;
        }
    }
}
